/**
 * axios封装
 */
import axios from 'axios'
import { message as Message } from 'antd'

const service = axios.create({
  baseURL: process.env.REACT_APP_BASE_URL,
  headers: {
    'Content-Type': 'application/json;charset=utf-8' // json格式
    // "Content-Type": "application/x-www-form-urlencoded;charset=utf-8" //form表单格式
  }
})

service.interceptors.request.use(
  (config) => {
    const newConfig = config
    // 配置请求之前的拦截操作
    if (sessionStorage.getItem('token')) {
      newConfig.headers['x-token'] = sessionStorage.getItem('token') // 让每个请求携带token-- ['ADMINTOKEN']为自定义key 请根据实际情况自行修改
      newConfig.headers['x-user'] = sessionStorage.getItem('user')
    }
    return newConfig
  },
  (err) => {
    return Promise.reject(err)
  }
)

service.interceptors.response.use(
  (response) => {
    // 请求成功之后的拦截操作,对返回的信息做进一步处理
    if (response.config.responseType === '') {
      const { code } = response.data
      let message = ''
      switch (code) {
        case 200:
          return response
        default:
          if (response.data.message) {
            message = response.data.message
            Message.error(message)
          }
          return Promise.reject(response)
      }
    } else {
      // 文件流格式
      if (response.data.type === 'application/json') {
        Message.error('无导出数据')
        return Promise.reject(response)
      }
      return response
    }
  },
  (err) => {
    // 请求失败之后的拦截操作,对返回的信息做进一步处理
    const newErr = err
    if (err && err.response) {
      newErr.message = `连接出错(${err.response.status})!`
    } else {
      newErr.message = '连接服务器失败!'
    }
    Message.error(newErr.message)
    return Promise.reject(newErr)
  }
)

export default service
